package com.zwx.aray.leetcode_4;

/**
 * 旋转数组
 * 给定一个数组，将数组中的元素向右移动 k 个位置，其中 k 是非负数。
 *
 * @author 文希
 * @create 2019-06-27 23:41
 */
public class RotateArray {

    /**
     * 思路：
     *      经过3次子数组的对称翻转
     *
     * @param nums
     * @param k
     */
    private static void rotate(int[] nums ,int k){
        int count = k % nums.length;
        int limit = nums.length-count;

        reverse(nums,0,limit-1);
        reverse(nums,limit,nums.length-1);
        reverse(nums,0,nums.length-1);
    }

    private static void reverse(int[] arr,int st,int end){
        while (st < end){
            int temp = arr[st];
            arr[st] = arr[end];
            arr[end] = temp;
            st++;
            end--;
        }
    }

    public static void main(String[] args) {
        int[] nums = {1,2,3,4,5,6,7};
        int k = 3;
        rotate(nums,k);
        for (int num : nums) {
            System.out.println(num);
        }
    }
}
